package com.example.fish.service.impl;

import com.example.fish.mapper.UserInfoMapper;
import com.example.fish.pojo.UserInfo;
import com.example.fish.service.UserInfoService;
import com.example.fish.service.ex.FileUploadException;
import com.example.fish.service.ex.UserNotExistsException;
import com.example.fish.service.ex.UserUpdateAvatorException;
import com.example.fish.service.ex.UserUpdateException;
import com.example.fish.utils.StaticVariable;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.web.multipart.MultipartFile;

import java.io.File;
import java.io.IOException;
import java.util.UUID;

@Service
public class UserInfoServiceImpl implements UserInfoService {

    @Autowired
    private UserInfoMapper userInfoMapper;

    @Override
    public UserInfo getUserInfoById(Integer id) {
        UserInfo user = userInfoMapper.selectById(id);
//        System.out.println("getUserinfo id"+user);
        if (user == null){
            throw new UserNotExistsException("用户信息查询失败！");
        }
        return user;
    }

    /***
     * 修改详细信息
     * @param userInfo
     * @return
     */
    @Override
    public Integer updateUserInfo(UserInfo userInfo) {
        int i = userInfoMapper.updateByPrimaryKey(userInfo);
        if (i == 0){
            throw new UserUpdateException("更新失败！");
        }
        return i;
    }

    /***
     * 修改头像
     * 接收到的文件修改名称之后,统一存储;
     * 将文件名保存到数据库中即可
     * 根据用户id来修改信息
     * @param userid 用户信息
     * @param file 头像文件
     * @return 修改结果  1 / 0
     */
    @Override
    public Integer updateAvatar(Integer userid, MultipartFile file) {
        //        删除原头像
        String oldAvatar = userInfoMapper.selectByPrimaryKey(userid).getAvator();
//        判断是不是默认头像
        if (!oldAvatar.equals("admin.jpg")){
            File file2 = new File(StaticVariable.AVATOR_PATH + "/" + oldAvatar);
            file2.delete();
        }
        //        修改头像
        String newAvatar = updateFile(userid, file, StaticVariable.AVATOR_PATH);
        UserInfo userInfo = userInfoMapper.selectById(userid);
        userInfo.setAvator(newAvatar);
        int i = userInfoMapper.updateByPrimaryKey(userInfo);
        if (i == 0){
            throw new UserUpdateAvatorException("图片更新失败");
        }
        return i;
    }

    /***
     * 修改主页的背景图片
     * @param userid 用户id
     * @param file 图片
     * @return 修改结果
     */
    @Override
    public Integer updateBackImg(Integer userid, MultipartFile file) {
        //删除原图片
        String oldBackImg = userInfoMapper.selectById(userid).getBackimg();
//        判断是不是默认
        if(!oldBackImg.equals("admin.jpg")){
            File file1 = new File(StaticVariable.BACKIMG_PATH+"/"+oldBackImg);
            file1.delete();
        }
        String newBackImg = updateFile(userid, file, StaticVariable.BACKIMG_PATH);
        UserInfo userInfo=userInfoMapper.selectById(userid);
        userInfo.setBackimg(newBackImg);
        int i = userInfoMapper.updateByPrimaryKey(userInfo);
        if (i == 0){
            throw new UserUpdateAvatorException("图片更新失败");
        }
        return i;
    }

    /***
     * 保存文件，存储文件
     * @param userid userid
     * @param file img
     * @param path filePath
     * @return oldPath
     */

    private String updateFile(Integer userid,MultipartFile file,String path){
        //        获取原文件名
        String originalFilename = file.getOriginalFilename();
//        定义存储的文件名
        String name = UUID.randomUUID().toString();
//        获取类型
        String type = originalFilename.substring(originalFilename.lastIndexOf("."));
//        创建文件对象
        File file1 = new File(path+ "/" + name  + type);
        if (!file1.exists()){
            file1.mkdirs();
        }
//        存储文件
        try {
            file.transferTo(file1);
        } catch (IOException e) {
//            存储失败
            throw new FileUploadException("文件存储失败");
        }
        return name+type;
    }
}
